home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / fdimg / oh!.2hd / OH!DEN_B.LZH / TOOLS / DC_VIEW / DITEM.C < prev    next >
Text File  |  1995-03-20  |  23KB  |  716 lines

  1. /******************************************************************************
  2.  *    ditem.c:    ダイアログの処理関数
  3.  ******************************************************************************
  4.  */
  5. #include <console.h>        /* コンソール系マネージャを利用するときに必要 */
  6. #include <sxgraph.h>        /* グラフ系マネージャを利用するときに必要 */
  7. #include <window.h>        /* ウィンドウマンを利用するときに必要    */
  8. #include <control.h>        /* コントロールマンを利用するときに必要    */
  9. #include <dialog.h>        /* ダイアログマンを利用するときに必要    */
  10. #include <text.h>        /* テキストマンを利用するときに必要    */
  11. #include <task.h>        /* タスクマンを利用するときに必要    */
  12. #include "DC.h"            /* このプログラム固有のヘッダファイル    */
  13.  
  14. /******************************************************************************
  15.  *    dialogProc2():    ダイアログの作成、表示と各種処理(ドラブパスの設定)
  16.  ******************************************************************************
  17.  *    引数:    ComVal *pcv    共通変数へのポインタ
  18.  *                = TRUE:  処理完了
  19.  *                = FALSE: 処理失敗
  20.  *    戻り値:    int num        終了したダイアログアイテムの番号
  21.  *                = 1: [設定]ボタン
  22.  *                = 2: [取消]ボタン
  23.  *                < 0: 処理失敗
  24.  */
  25. int dialogProc2(ComVal *pcv)
  26. {
  27.     int num;            /* ダイアログのアイテム番号    */
  28.     int lastBC;
  29.     LASCII str1;
  30.     LASCII str2;
  31.     Graph *lastGraph;
  32.     Dialog *dialogPtr;
  33.  
  34.     static short funcKeyTbl[] = {    /* ファンクションキーアサインテーブル */
  35.         K_DEL,   0x07,        /* [DEL]    */
  36.         K_LEFT,  0x13,        /* [←]        */
  37.         K_RIGHT, 0x04,        /* [→]        */
  38.         K_CLR,   0,        /* [CLR]    */
  39.         K_INS,   0,        /* [INS]    */
  40.         0, 0            /* テーブル終端    */
  41.     };
  42.  
  43.     /* ダイアログアイテムのリソースを読み込む */
  44.     dialogPtr = TSReferDM(129, NULL, W_FRONT);
  45.  
  46.     if (dialogPtr == NULL) {
  47.         pcv->errorCode = 7;    /* 作成できなかった        */
  48.         return -1;        /* 失敗したので-1を返す    */
  49.     }
  50.     /* ファンクションキーアサインテーブルを設定する */
  51.     (*dialogPtr->tEdit)->funcCode = funcKeyTbl;
  52.  
  53.     /* 編集可能テキストの文字列を設定する */
  54.     str1[0] = sprintf((char *) &str1[1], "%s",pcv->a_drv);
  55.     setDItemText(dialogPtr, 3, str1);
  56.     str2[0] = sprintf((char *) &str2[1], "%s",pcv->b_drv);
  57.     setDItemText(dialogPtr, 4, str2);
  58.  
  59.     /* ダイアログ内を描画する */
  60.     lastGraph = GMGetGraph();    /* カレントグラフを退避する    */
  61.     /* ダイアログをカレントグラフにする */
  62.     GMSetGraph(&dialogPtr->window.graph);
  63.     /* タイトルを描画する */
  64.     GMShadowStrZ("ドライブパスの設定",      LONGWORD(44,   4));
  65.     GMShadowStrZ("A:\\ as",           LONGWORD(12,  48));
  66.     GMShadowStrZ("B:\\ as",                LONGWORD(12,  72));
  67.     lastBC = GMBackColor(G_WHITE);    /* バックグラウンドカラーを白にする */
  68.     DMDraw(dialogPtr);        /* すべてのアイテムを描画する    */
  69.  
  70.     while (1) {
  71.         /* 帰還属性を持つアイテムが押されるまで、アイテムの各種処理を
  72.            システムに任せて、押されたアイテムの番号を取得する */
  73.         num = DMControl(filterProc);
  74.         switch (num) {
  75.         case 1:            /* [設定]ボタン            */
  76.         case 2:            /* [取消]ボタン            */
  77.             break;
  78.         case 3:            /* テキストエディット        */
  79.         case 4:
  80.             break;
  81.         }
  82.         if (num == 1) {
  83.             /* [設定]ボタンが押されたなら、
  84.                     編集可能テキストの内容を保存する */
  85.             /* 編集可能テキストの文字列を取得する */
  86.             getDItemText(dialogPtr, 3, str1);
  87.             strcpy(pcv->a_drv, strupr(&str1[1]));
  88.             getDItemText(dialogPtr, 4, str2);
  89.             strcpy(pcv->b_drv, strupr(&str2[1]));
  90.             break;
  91.         } else if (num == 2)
  92.             break;
  93.     }
  94.     GMBackColor(lastBC);        /* バックグラウンドカラーを元に戻す */
  95.     DMDispose(dialogPtr);        /* ダイアログを廃棄する        */
  96.     GMSetGraph(lastGraph);        /* カレントグラフを元に戻す    */
  97.  
  98.     /* 処理が完了したのでアイテム番号を返す */
  99.     return num;
  100. }
  101.  
  102. /******************************************************************************
  103.  *    filterProc():    ダイアログのフィルタ関数
  104.  ******************************************************************************
  105.  *    引数:    Dialog *dlgPtr    ダイアログポインタ
  106.  *        Event *pev    イベントレコードへのポインタ
  107.  *    戻り値:    int        終了コード(ここでは、常に0)
  108.  *    注釈:
  109.  *    DMControl()から呼び出され、カーソルの点滅処理と、リターンキー/ESCキー
  110.  *    の入力を[設定]/[取消]ボタンのマウス左ダウンイベントに変換する処理を行う。
  111.  */
  112. int filterProc(Dialog *dlgPtr, Event *pev)
  113. {
  114.     int keyCode;            /* キーコード            */
  115.     int num = 0;            /* ダイアログのアイテム番号    */
  116.     short type;
  117.     Rect rc;
  118.     Handle item;
  119.  
  120.     /* ダイアログをカレントグラフにする */
  121.     GMSetGraph(&dlgPtr->window.graph);
  122.  
  123.     switch (pev->what) {        /* イベントの種類は?    */
  124.     case E_IDLE:            /* アイドルイベント    */
  125.         TMIdle(dlgPtr->tEdit);    /* カーソルを点滅させる    */
  126.         break;
  127.     case E_KEYDOWN:            /* キーダウンイベント    */
  128.         /* キーコードをファンクションキーアサインテーブルで変換する */
  129.         keyCode = TMKeyToAsk(dlgPtr->tEdit, (TsEvent *) pev);
  130.         /* キーコードがあるか? */
  131.         if (keyCode != -1 && keyCode != 0) {
  132.             switch (pev->whom.key.ascii) {
  133.             case '\r':        /* リターンキーかENTERキー */
  134.                 num = 1;    /* [設定]ボタン        */
  135.                 break;
  136.             case '\x1b':        /* ESCキー        */
  137.                 num = 2;    /* [取消]ボタン        */
  138.                 break;
  139.             }
  140.             if (num != 0) {
  141.                 /* 指定アイテムのレクタングル内を指す座標を作成する */
  142.                 DIGet(dlgPtr, num, &type, &item, &rc);
  143.                 /* 縦横4ドットだけ内側へ移動する */
  144.                 rc.d.left += 4;
  145.                 rc.d.top += 4;
  146.                 /* グローバル座標系に変換する */
  147.                 pev->where.x_y = GMLocalToGlobal(rc.l.l_t);
  148.                 /* イベントをマウス左ダウンイベントにする */
  149.                 pev->what = E_MSLDOWN;
  150.             }
  151.         }
  152.         break;
  153.     case E_UPDATE:            /* アップデートイベント        */
  154.         /* カーソルを点滅させるために、アップデート処理を行う */
  155.         WMUpdate(&dlgPtr->window); /* アップデートを開始する    */
  156.         WMUpdtOver(&dlgPtr->window); /* アップデートを終了する    */
  157.         break;
  158.     }
  159.     return 0;
  160. }
  161.  
  162. /******************************************************************************
  163.  *    dialogProc3():    ダイアログの作成、表示と各種処理(表示諸設定)
  164.  ******************************************************************************
  165.  *    引数:    ComVal *pcv    共通変数へのポインタ
  166.  *                = TRUE:  処理完了
  167.  *                = FALSE: 処理失敗
  168.  *    戻り値:    int num        終了したダイアログアイテムの番号
  169.  *                = 1: [設定]ボタン
  170.  *                = 2: [取消]ボタン
  171.  *                < 0: 処理失敗
  172.  */
  173. int dialogProc3(ComVal *pcv)
  174. {
  175.     int num;            /* ダイアログのアイテム番号    */
  176.     int chkBox1;            /* チェックボックスの現在の状態    */
  177.     int chkBox2;
  178.     int adjust;
  179.     int part;
  180.     char buff[10];
  181.     Graph *lastGraph;
  182.     Dialog *dialogPtr;
  183.     Control ***ctrHdl;
  184.  
  185.     Rect rcl = {520, 363, 554, 379};
  186.  
  187.     /* ダイアログアイテムのリソースを読み込む */
  188.     dialogPtr = TSReferDM(130, NULL, W_FRONT);
  189.  
  190.     if (dialogPtr == NULL) {
  191.         pcv->errorCode = 7;    /* 作成できなかった        */
  192.         return -1;        /* 失敗したので-1を返す    */
  193.     }
  194.  
  195.     adjust = pcv->scrollstep;
  196.     setDItemControl(dialogPtr, 3, adjust);
  197.     setDItemCTitle(dialogPtr, 3, adjust);
  198.  
  199.     chkBox1 = pcv->cutDisp;        /* チェックボックスの現在の状態を取得する */
  200.     chkBox2 = pcv->lineDisp;
  201.     if (chkBox1 == 1)        /* チェック状態か?        */
  202.         /* チェックボックスに1をセットする */
  203.         setDItemControl(dialogPtr, 4, 1);
  204.     if (chkBox2 == 1)        /* チェック状態か?        */
  205.         /* チェックボックスに1をセットする */
  206.         setDItemControl(dialogPtr, 5, 1);
  207.  
  208.     /* ダイアログ内を描画する */
  209.     lastGraph = GMGetGraph();    /* カレントグラフを退避する    */
  210.     /* ダイアログをカレントグラフにする */
  211.     GMSetGraph(&dialogPtr->window.graph);
  212.     /* タイトルを描画する */
  213.     GMShadowStrZ(" 画面表示諸設定",         LONGWORD(64,   4));
  214.     GMShadowStrZ("スクロール行数",       LONGWORD(30,  40));
  215.     GMShadowStrZ("カットファイルの表示",       LONGWORD(48,  70));
  216.     GMShadowStrZ("行のリアルタイム表示",     LONGWORD(48,  94));
  217.  
  218.     DMDraw(dialogPtr);        /* すべてのアイテムを描画する    */
  219.  
  220.     while (1) {
  221.         /* 帰還属性を持つアイテムが押されるまで、アイテムの各種処理を
  222.            システムに任せて、押されたアイテムの番号を取得する */
  223.         num = DMControl(NULL);
  224.         switch (num) {
  225.         case 1:            /* [設定]ボタン            */
  226.         case 2:            /* [取消]ボタン            */
  227.             break;
  228.         case 3:            /* 数値調整ボタン        */
  229.             part = checkCM(dialogPtr, num);
  230.             switch(part) {
  231.             case C_INDEC:
  232.                 if (adjust>1)
  233.                     adjust--;
  234.                 break;
  235.             case C_ININC:
  236.                 if (adjust<6)
  237.                     adjust++;
  238.                 break;
  239.             }
  240.             setDItemCTitle(dialogPtr, num, adjust, part);
  241.             setDItemControl(dialogPtr, num, 1);
  242.             break;
  243.         case 4:    chkBox1 = getDItemControl(dialogPtr, num) ^ 1;
  244.             setDItemControl(dialogPtr, num, chkBox1);
  245.             break;
  246.         case 5:    chkBox2 = getDItemControl(dialogPtr, num) ^ 1;
  247.             setDItemControl(dialogPtr, num, chkBox2);
  248.             break;
  249.         }
  250.         if (num == 1) {
  251.             /* [設定]ボタンが押されたなら、
  252.                     アイテムの内容を保存する */
  253.             pcv->scrollstep = adjust;
  254.             pcv->cutDisp = chkBox1;
  255.             pcv->lineDisp = chkBox2;
  256.             break;
  257.         } else if (num == 2)
  258.             break;
  259.     }
  260.     DMDispose(dialogPtr);        /* ダイアログを廃棄する        */
  261.     GMSetGraph(lastGraph);        /* カレントグラフを元に戻す    */
  262.     GMSetGraph(&pcv->windowPtr->graph);
  263.     if (!pcv->lineDisp) {
  264.         GMShadowRect(&rcl);
  265.         GMMove(LONGWORD(521,364));
  266.         sprintf(buff, "%5d", pcv->ofset + 1);
  267.         GMDrawStrZ(buff);
  268.     }
  269.     /* 処理が完了したのでアイテム番号を返す */
  270.     return num;
  271. }
  272.  
  273. /******************************************************************************
  274.  *    dialogProc4():    ダイアログの作成、表示と各種処理(起動プログラム設定)
  275.  ******************************************************************************
  276.  *    引数:    ComVal *pcv    共通変数へのポインタ
  277.  *                = TRUE:  処理完了
  278.  *                = FALSE: 処理失敗
  279.  *    戻り値:    int num        終了したダイアログアイテムの番号
  280.  *                = 1: [設定]ボタン
  281.  *                = 2: [取消]ボタン
  282.  *                < 0: 処理失敗
  283.  */
  284. int dialogProc4(ComVal *pcv)
  285. {
  286.     int num;            /* ダイアログのアイテム番号    */
  287.     int lastBC;
  288.     LASCII pcmfn,pcmOpt;
  289.     LASCII mzfn,mzOpt;
  290.     LASCII picfn,picOpt;
  291.     int pcmBtn,mzBtn,picBtn;
  292.     Graph *lastGraph;
  293.     Dialog *dialogPtr;
  294.  
  295.     static short funcKeyTbl[] = {    /* ファンクションキーアサインテーブル */
  296.         K_DEL,   0x07,        /* [DEL]    */
  297.         K_LEFT,  0x13,        /* [←]        */
  298.         K_RIGHT, 0x04,        /* [→]        */
  299.         K_CLR,   0,        /* [CLR]    */
  300.         K_INS,   0,        /* [INS]    */
  301.         0, 0            /* テーブル終端    */
  302.     };
  303.  
  304.     /* ダイアログアイテムのリソースを読み込む */
  305.     dialogPtr = TSReferDM(131, NULL, W_FRONT);
  306.  
  307.     if (dialogPtr == NULL) {
  308.         pcv->errorCode = 7;    /* 作成できなかった        */
  309.         return -1;        /* 失敗したので-1を返す    */
  310.     }
  311.     /* ファンクションキーアサインテーブルを設定する */
  312.     (*dialogPtr->tEdit)->funcCode = funcKeyTbl;
  313.  
  314.     /* 編集可能テキストの文字列を設定する */
  315.  
  316.     pcmBtn = pcv->pcmTask;
  317.     if (pcv->pcmTask != 0)
  318.         pcmBtn = 1;
  319.     setDItemControl(dialogPtr, 3, pcmBtn == 0);
  320.     setDItemControl(dialogPtr, 4, pcmBtn == 1);
  321.  
  322.     mzBtn = pcv->mzTask;
  323.     if (pcv->mzTask != 0)
  324.         mzBtn = 1;
  325.     setDItemControl(dialogPtr, 7, mzBtn == 0);
  326.     setDItemControl(dialogPtr, 8, mzBtn == 1);
  327.  
  328.     picBtn = pcv->picTask;
  329.     if (pcv->picTask != 0)
  330.         picBtn = 1;
  331.     setDItemControl(dialogPtr, 13, picBtn == 0);
  332.     setDItemControl(dialogPtr, 14, picBtn == 1);
  333.  
  334.     pcmfn[0] = sprintf((char *) &pcmfn[1], "%s",pcv->pcmFname);
  335.     setDItemText(dialogPtr, 5, pcmfn);
  336.     pcmOpt[0] = sprintf((char *) &pcmOpt[1], "%s",pcv->pcmOpt);
  337.     setDItemText(dialogPtr, 6, pcmOpt);
  338.  
  339.     mzfn[0] = sprintf((char *) &mzfn[1], "%s",pcv->mzFname);
  340.     setDItemText(dialogPtr, 9, mzfn);
  341.     mzOpt[0] = sprintf((char *) &mzOpt[1], "%s",pcv->mzOpt);
  342.     setDItemText(dialogPtr, 10, mzOpt);
  343.  
  344.     picfn[0] = sprintf((char *) &picfn[1], "%s",pcv->picFname);
  345.     setDItemText(dialogPtr, 11, picfn);
  346.     picOpt[0] = sprintf((char *) &picOpt[1], "%s",pcv->picOpt);
  347.     setDItemText(dialogPtr, 12, picOpt);
  348.  
  349.     /* ダイアログ内を描画する */
  350.     lastGraph = GMGetGraph();    /* カレントグラフを退避する    */
  351.     /* ダイアログをカレントグラフにする */
  352.     GMSetGraph(&dialogPtr->window.graph);
  353.     /* タイトルを描画する */
  354.     GMShadowStrZ("起動プログラム設定",      LONGWORD(76,   4));
  355.     GMShadowStrZ("PCM:",               LONGWORD(12,  36));
  356.     GMShadowStrZ("IOCS CALL",            LONGWORD(96,  36));
  357.     GMShadowStrZ("ZMS:",              LONGWORD(12, 108));
  358.     GMShadowStrZ("ZMUSIC CALL",           LONGWORD(96, 108));
  359.     GMShadowStrZ("PIC:",                LONGWORD(12, 180));
  360.     GMShadowStrZ("表示しない",             LONGWORD(96, 180));
  361.     GMShadowStrZ("Option",                LONGWORD(48,  84));
  362.     GMShadowStrZ("Option",                LONGWORD(48, 156));
  363.     GMShadowStrZ("Option",                LONGWORD(48, 228));
  364.     lastBC = GMBackColor(G_WHITE);    /* バックグラウンドカラーを白にする */
  365.     DMDraw(dialogPtr);        /* すべてのアイテムを描画する    */
  366.  
  367.     while (1) {
  368.         /* 帰還属性を持つアイテムが押されるまで、アイテムの各種処理を
  369.            システムに任せて、押されたアイテムの番号を取得する */
  370.         num = DMControl(filterProc);
  371.         switch (num) {
  372.         case 1:            /* [設定]ボタン            */
  373.         case 2:            /* [取消]ボタン            */
  374.             break;
  375.         case 3:            /* ラジオボタン(pcm)        */
  376.             pcmBtn = 0;
  377.             setDItemControl(dialogPtr, num    , 1);
  378.             setDItemControl(dialogPtr, num + 1, 0);
  379.             break;
  380.         case 4:
  381.             pcmBtn = 1;
  382.             setDItemControl(dialogPtr, num - 1, 0);
  383.             setDItemControl(dialogPtr, num    , 1);
  384.             break;
  385.         case 5:            /* テキストエディット        */
  386.         case 6:
  387.             break;
  388.         case 7:            /* ラジオボタン(zms)        */
  389.             mzBtn = 0;
  390.             setDItemControl(dialogPtr, num    , 1);
  391.             setDItemControl(dialogPtr, num + 1, 0);
  392.             break;
  393.         case 8:
  394.             mzBtn = 1;
  395.             setDItemControl(dialogPtr, num - 1, 0);
  396.             setDItemControl(dialogPtr, num    , 1);
  397.             break;
  398.         case 9:            /* テキストエディット        */
  399.         case 10:
  400.         case 11:
  401.         case 12:
  402.             break;
  403.         case 13:        /* ラジオボタン(pic)        */
  404.             picBtn = 0;
  405.             setDItemControl(dialogPtr, num    , 1);
  406.             setDItemControl(dialogPtr, num + 1, 0);
  407.             break;
  408.         case 14:
  409.             picBtn = 1;
  410.             setDItemControl(dialogPtr, num - 1, 0);
  411.             setDItemControl(dialogPtr, num    , 1);
  412.             break;
  413.         }
  414.         if (num == 1) {
  415.             /* [設定]ボタンが押されたなら、
  416.                     編集可能テキストの内容を保存する */
  417.             /* 編集可能テキストの文字列を取得する */
  418.             getDItemText(dialogPtr, 5, pcmfn);
  419.             strcpy(pcv->pcmFname, &pcmfn[1]);
  420.             getDItemText(dialogPtr, 6, pcmOpt);
  421.             strcpy(pcv->pcmOpt, &pcmOpt[1]);
  422.  
  423.             getDItemText(dialogPtr, 9, mzfn);
  424.             strcpy(pcv->mzFname, &mzfn[1]);
  425.             getDItemText(dialogPtr, 10, mzOpt);
  426.             strcpy(pcv->mzOpt, &mzOpt[1]);
  427.  
  428.             getDItemText(dialogPtr, 11, picfn);
  429.             strcpy(pcv->picFname, &picfn[1]);
  430.             getDItemText(dialogPtr, 12, picOpt);
  431.             strcpy(pcv->picOpt, &picOpt[1]);
  432.  
  433.             if (pcmBtn) {
  434.                 if (pcv->pcmTask == 0)
  435.                     pcv->pcmTask = 1;
  436.             } else {
  437.                 pcv->pcmTask = 0;
  438.             }
  439.  
  440.             if (mzBtn) {
  441.                 if (pcv->mzTask == 0)
  442.                     pcv->mzTask = 1;
  443.             } else {
  444.                 pcv->mzTask = 0;
  445.             }
  446.             if (picBtn) {
  447.                 if (pcv->picTask == 0)
  448.                     pcv->picTask = 1;
  449.             } else {
  450.                 pcv->picTask = 0;
  451.             }
  452.             break;
  453.  
  454.         } else if (num == 2)
  455.             break;
  456.     }
  457.     GMBackColor(lastBC);        /* バックグラウンドカラーを元に戻す */
  458.     DMDispose(dialogPtr);        /* ダイアログを廃棄する        */
  459.     GMSetGraph(lastGraph);        /* カレントグラフを元に戻す    */
  460.  
  461.     /* 処理が完了したのでアイテム番号を返す */
  462.     return num;
  463. }
  464.  
  465. /******************************************************************************
  466.  *    dialogProc5():    ダイアログの作成、表示と各種処理(文字列検索)
  467.  ******************************************************************************
  468.  *    引数:    ComVal *pcv    共通変数へのポインタ
  469.  *                = TRUE:  処理完了
  470.  *                = FALSE: 処理失敗
  471.  *    戻り値:    int num        終了したダイアログアイテムの番号
  472.  *                = 1: [設定]ボタン
  473.  *                = 2: [取消]ボタン
  474.  *                < 0: 処理失敗
  475.  */
  476. int dialogProc5(ComVal *pcv, int mode)
  477. {
  478.     int num;            /* ダイアログのアイテム番号    */
  479.     int lastBC;
  480.     LASCII str1;
  481.     Graph *lastGraph;
  482.     Dialog *dialogPtr;
  483.     int offset;
  484.     char *txtPt;
  485.     int *txtNo;
  486.     int status,i;
  487.     char *pt;
  488.  
  489.     static short funcKeyTbl[] = {    /* ファンクションキーアサインテーブル */
  490.         K_DEL,   0x07,        /* [DEL]    */
  491.         K_LEFT,  0x13,        /* [←]        */
  492.         K_RIGHT, 0x04,        /* [→]        */
  493.         K_CLR,   0,        /* [CLR]    */
  494.         K_INS,   0,        /* [INS]    */
  495.         0, 0            /* テーブル終端    */
  496.     };
  497.  
  498.     if (mode == 0) {
  499.  
  500.         /* ダイアログアイテムのリソースを読み込む */
  501.         dialogPtr = TSReferDM(132, NULL, W_FRONT);
  502.         WMMove(&dialogPtr->window, GMLocalToGlobal(LONGWORD(122,250)),FALSE);
  503.         WMShow(&dialogPtr->window);
  504.         if (dialogPtr == NULL) {
  505.             pcv->errorCode = 7;    /* 作成できなかった        */
  506.             return -1;        /* 失敗したので-1を返す    */
  507.         }
  508.         /* ファンクションキーアサインテーブルを設定する */
  509.         (*dialogPtr->tEdit)->funcCode = funcKeyTbl;
  510.  
  511.         /* 編集可能テキストの文字列を設定する */
  512.         if (pcv->mojiFlag == 0) {
  513.             pcv->moji[0] = 0;
  514.             pcv->mojiFlag = 1;
  515.         }
  516.         str1[0] = sprintf((char *) &str1[1], "%s",pcv->moji);
  517.         setDItemText(dialogPtr, 4, str1);
  518.  
  519.         /* ダイアログ内を描画する */
  520.         lastGraph = GMGetGraph();    /* カレントグラフを退避する    */
  521.         /* ダイアログをカレントグラフにする */
  522.         GMSetGraph(&dialogPtr->window.graph);
  523.         /* タイトルを描画する */
  524.         GMShadowStrZ("検索文字列:",      LONGWORD(12, 12));
  525.         lastBC = GMBackColor(G_WHITE);    /* バックグラウンドカラーを白にする */
  526.         DMDraw(dialogPtr);        /* すべてのアイテムを描画する    */
  527.  
  528.         while (1) {
  529.             /* 帰還属性を持つアイテムが押されるまで、アイテムの各種処理を
  530.                システムに任せて、押されたアイテムの番号を取得する */
  531.             num = DMControl(filterProc);
  532.             switch (num) {
  533.             case 1:            /* [全域検索]ボタン        */
  534.                 offset = 0;
  535.                 break;
  536.             case 2:            /* [取消]ボタン            */
  537.                 break;
  538.             case 3:            /* [次検索]ボタン        */
  539.                 offset = pcv->status + 1;
  540.                 break;
  541.             case 4:            /* テキストエディット        */
  542.                 break;
  543.             }
  544.  
  545.             if (num == 1 || num == 3) {
  546.                 /* [*検索]ボタンが押されたなら、
  547.                         編集可能テキストの内容を保存する */
  548.                 /* 編集可能テキストの文字列を取得する */
  549.                 getDItemText(dialogPtr, 4, str1);
  550.                 strcpy(pcv->moji, &str1[1]);
  551.                 break;
  552.  
  553.             } else if (num == 2)
  554.                 break;
  555.         }
  556.  
  557.     GMBackColor(lastBC);        /* バックグラウンドカラーを元に戻す */
  558.     DMDispose(dialogPtr);        /* ダイアログを廃棄する        */
  559.     GMSetGraph(lastGraph);        /* カレントグラフを元に戻す    */
  560.  
  561.     } else if (mode == 1) {
  562.         num = 1;
  563.         offset = 0;
  564.     } else if (mode == 2) {
  565.         num = 3;
  566.         offset = pcv->status + 1;
  567.     }
  568.  
  569.     status = -1;
  570.     if (num == 1 || num == 3) {
  571.         MMHdlLock(pcv->txt);
  572.         MMHdlLock(pcv->txtNo);
  573.         txtPt = *(pcv->txt);
  574.         txtNo = *(pcv->txtNo);
  575.         if ((pt = strstr((txtPt + *(txtNo + offset)), pcv->moji)) != NULL) {
  576.             for(i=offset;i<pcv->Maxline + 1;i++) {
  577.                 if ( (txtPt + *(txtNo + i)) > pt) {
  578.                     pcv->ofset = i - 1;
  579.                     status = pcv->ofset;
  580.                     pcv->status = pcv->ofset;
  581.                     break;
  582.                 }
  583.             }
  584.         }
  585.         MMHdlUnlock(pcv->txtNo);
  586.         MMHdlUnlock(pcv->txt);
  587.     }
  588.  
  589.     /* 処理が完了したのでstatusを返す */
  590.     return status;
  591. }
  592.  
  593. /******************************************************************************
  594.  *    setDItemText():    ダイアログアイテムの編集可能テキストへの文字列の設定
  595.  ******************************************************************************
  596.  *    引数:    Dialog *dlgPtr    ダイアログポインタ
  597.  *        int num        ダイアログのアイテム番号
  598.  *        _LASCII str    設定するLASCII型文字列
  599.  */
  600. void setDItemText(Dialog *dlgPtr, int num, _LASCII str)
  601. {
  602.     short type;
  603.     Rect rc;
  604.     Handle item;
  605.  
  606.     /* ダイアログアイテムのハンドルを取得する */
  607.     DIGet(dlgPtr, num, &type, &item, &rc);
  608.     DITSet(type, item, str);    /* 編集可能テキストに文字列を設定する */
  609. }
  610.  
  611. /******************************************************************************
  612.  *    getDItemText():    ダイアログアイテムの編集可能テキストの文字列の取得
  613.  ******************************************************************************
  614.  *    引数:    Dialog *dlgPtr    ダイアログポインタ
  615.  *        int num        ダイアログのアイテム番号
  616.  *        _LASCII str    LASCII型文字列を格納するポインタ
  617.  */
  618. void getDItemText(Dialog *dlgPtr, int num, _LASCII str)
  619. {
  620.     short type;
  621.     Rect rc;
  622.     Handle item;
  623.  
  624.     /* ダイアログアイテムのハンドルを取得する */
  625.     DIGet(dlgPtr, num, &type, &item, &rc);
  626.     DITGet(type, item, str);    /* 編集可能テキストの文字列を取得する */
  627.     if (str[str[0]] == '\\') {    /* 文字列の最後に0を付加する    */
  628.         str[str[0]] = 0;
  629.     } else {
  630.         str[str[0] + 1] = 0;
  631.     }
  632. }
  633.  
  634. /******************************************************************************
  635.  *    setDItemControl():    ダイアログアイテムのコントロールへの値の設定
  636.  ******************************************************************************
  637.  *    引数:    Dialog *dlgPtr    ダイアログポインタ
  638.  *        int num        ダイアログのアイテム番号
  639.  *        int val        設定する値
  640.  */
  641. void setDItemControl(Dialog *dlgPtr, int num, int val)
  642. {
  643.     short type;
  644.     Rect rc;
  645.     Handle item;
  646.  
  647.     /* ダイアログアイテムのハンドルを取得する */
  648.     DIGet(dlgPtr, num, &type, &item, &rc);
  649.     /* コントロールに値を設定する */
  650.     CMValueSet((Control **) item, val);
  651. }
  652.  
  653. /******************************************************************************
  654.  *    getDItemControl():    ダイアログアイテムのコントロールの現在値の取得
  655.  ******************************************************************************
  656.  *    引数:    Dialog *dlgPtr    ダイアログポインタ
  657.  *        int num        ダイアログのアイテム番号
  658.  *        int *val    値を格納するポインタ
  659.  */
  660. int getDItemControl(Dialog *dlgPtr, int num)
  661. {
  662.     short type;
  663.     Rect rc;
  664.     Handle item;
  665.  
  666.     /* ダイアログアイテムのハンドルを取得する */
  667.     DIGet(dlgPtr, num, &type, &item, &rc);
  668.     /* コントロールの現在値を返す */
  669.     return CMValueGet((Control **) item);
  670. }
  671.  
  672. /******************************************************************************
  673.  *    checkCM():    ダイアログアイテムの操作パートの取得
  674.  ******************************************************************************
  675.  *    引数:    Dialog *dlgPtr    ダイアログポインタ
  676.  *        int num        ダイアログのアイテム番号
  677.  *        int *val    値を格納するポインタ
  678.  */
  679. int checkCM(Dialog *dlgPtr, int num)
  680. {
  681.     short type;
  682.     Rect rc;
  683.     Handle item;
  684.  
  685.     /* ダイアログアイテムのハンドルを取得する */
  686.     DIGet(dlgPtr, num, &type, &item, &rc);
  687.     /* コントロールの現在値を返す */
  688.     return CMCheck((Control **) item, EMMSLoc(), NULL);
  689. }
  690.  
  691. /******************************************************************************
  692.  *    setDItemCTitle():    ダイアログアイテムのタイトル描画
  693.  ******************************************************************************
  694.  *    引数:    Dialog *dlgPtr    ダイアログポインタ
  695.  *        int num        ダイアログのアイテム番号
  696.  *        int val        値を格納するポインタ
  697.  */
  698. int setDItemCTitle(Dialog *dlgPtr, int num, int val, int part)
  699. {
  700.     short type;
  701.     Rect rc;
  702.     Handle item;
  703.     char buff[20];
  704.  
  705.     buff[0] = sprintf(&buff[1], "%4d", val);
  706.     /* ダイアログアイテムのハンドルを取得する */
  707.     DIGet(dlgPtr, num, &type, &item, &rc);
  708.     /* コントロールのタイトルを設定する */
  709.     CMTitleSet((Control **) item, (_LASCII) buff);
  710.     CMShine((Control **) item, part);
  711.     while(EMLStill()) {
  712.     }
  713.     CMShine((Control **) item, C_ACTIVE);
  714. }
  715. STR@VッEdEV3.00<@(!%G0JHH     
  716. S((SBxヨH vケ > >Ohh$000ヨ=4